import java.io.FileWriter;
import java.io.IOException;

import tec.*;

public class Simple {

	static Journal j;
	/*
	 * Sur un parametre de type Object, la methode println()
	 * déclenche la methode toString().
	 * La methodes toString() doit etre redefinie dans les
	 * deux classes UsagerStandard et Autobus.
	 */
	static private void deboguerEtat (Object t, Object p) {
		System.out.println(p);
		System.out.println(t);
	}

	static public void main (String[] args) 
	{
		if (args.length < 1 || "fichier".equals(args[0]))
		{
			FileWriter f = null;
			try {
				f = new FileWriter("log");
			} catch (IOException e) {
				e.printStackTrace();
			}
			j = new JournalFichier(f);
		}
		else if ("progressbar".equals(args[0]))
		{
			j = new JournalProgressBar();
		}
		else
		{
			j = new JournalErreur();
		}
		Transport serenity = FabriqueBus.faireBusJournalise(1, 2, j);

		Usager kaylee = FabriquePassager.fairePassagerStandard("Kaylee", 5);

		try{
			serenity.allerArretSuivant();
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}
		// debogue
		System.out.println(serenity);
		try{
			kaylee.monterDans(serenity);
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}

		Usager jayne = tec.FabriquePassager.fairePassagerStandard("Jayne", 4);
		try{
			jayne.monterDans(serenity);
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}

		try{
			serenity.allerArretSuivant();
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}
		// debogue
		System.out.println(serenity);
		System.out.println(kaylee);
		System.out.println(jayne);

		Usager inara = tec.FabriquePassager.fairePassagerStandard("Inara", 5);
		try{
			inara.monterDans(serenity);
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}

		try{
			serenity.allerArretSuivant();
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}
		// debogue
		System.out.println(serenity);
		System.out.println(kaylee);
		System.out.println(jayne);
		System.out.println(inara);

		try{
			serenity.allerArretSuivant();
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}
		// debogue
		System.out.println(serenity);
		System.out.println(kaylee);
		System.out.println(jayne);
		System.out.println(inara);

		try{
			serenity.allerArretSuivant();
		}
		catch(TecInvalidException e){
			System.out.println(e.getCause());
		}
		// debogue
		System.out.println(serenity);
		System.out.println(kaylee);
		System.out.println(jayne);
		System.out.println(inara);
	}
}

/* Resultat de l'execution.
	 [arret:1, assis:0, debout:0]
	 [arret:2, assis:1, debout:1]
	 Kaylee assis
	 Jayne debout
	 [arret:3, assis:1, debout:2]
	 Kaylee assis
	 Jayne debout
	 Inara debout
	 [arret:4, assis:1, debout:1]
	 Kaylee assis
	 Jayne dehors
	 Inara debout
	 [arret:5, assis:0, debout:0]
	 Kaylee dehors
	 Jayne dehors
	 Inara dehors
 */
